#include "lm75ad.h"

// 获取温度
float lm75ad_get_temp(void)
{
    uint16_t temp_reg = 0;
    float temp = 0.0;
    uint8_t recv_buf[2] = {0};
    lm75ad_read_reg(LM75AD_ADDR, TEMP_REG, recv_buf, 2);
    temp_reg = recv_buf[0];
    temp_reg = (temp_reg << 3) | (recv_buf[1] >> 5);
    if (temp_reg & (0x01 << 10))
    {
        temp_reg = temp_reg & ~(0x01 << 10);
        temp_reg -= 1;
        temp_reg = (~temp_reg) & 0x03ff;
        temp = temp_reg * (-0.125);
    }
    else
    {
        temp = temp_reg * 0.125;
    }
    return temp;
}
// 关断传感器
void lm75ad_power_off(void)
{
    
}
// 读寄存器值
void lm75ad_read_reg(uint8_t lm75ad_id, uint8_t reg, uint8_t *buf, uint8_t len)
{
    uint8_t i;
    lm75ad_write_addr(lm75ad_id, reg);
    i2c_gpio_start();
    i2c_gpio_send_byte(lm75ad_id | IIC_READ);
    i2c_gpio_recv_ack();
    for (i = 0; i < len; i++)
    {
        *(buf + i) = i2c_gpio_recv_byte();
        if (i != len - 1)
        {
            i2c_gpio_ack();
        }
    }
    i2c_gpio_noack();
    i2c_gpio_stop();
}
// 向iic总线写入器件地址和寄存器地址
uint8_t lm75ad_write_addr(uint8_t lm75ad_id, uint8_t reg)
{
    i2c_gpio_start();
    i2c_gpio_send_byte(lm75ad_id | IIC_WRITE);
    i2c_gpio_recv_ack();
    i2c_gpio_send_byte(reg);
    i2c_gpio_recv_ack();
    return 0;
}
